"""
所谓多层继承就是 b继承a，c继承b 这样的继承链

    多年之后，prentice也要把自己的技术传递给后人了

    这个时候就有一个 tusun继承prentice

调用父类方法的三种方式 - 推荐第三种
    # 调用父类方法1
    # 这种方式代码冗余，如果类名发生变化，代码需要频繁修改
    #Master.__init__(self)
    #Master.make_cake(self)
    #School.__init__(self)
    #School.make_cake(self)

    # 调用父类方法2
    # super(当前类名，self).03 函数（）
    #super(Prentice, self).__init__()
    #super(Prentice, self).make_cake()

    # 调用父类方法3 super().03 函数()
    # 如果是多继承的情况，super默认是第一个父类
    super().__init__()
    super().make_cake()

super注意事项：
    如果对象有父类有爷类，super()表示的是他的父类
    如果对象同时继承了两个类，两个爹，super()表示他的第一个爹。

"""
class Master():
    def __init__(self):
        self.kongfu = ['古法汤圆']

    def make_cake(self):
        print(f"Master使用：【{self.kongfu}】制作早餐")

class School(Master):
    def __init__(self):
        self.kongfu = ['机器汤圆']

    def make_cake(self):
        print(f"School使用【{self.kongfu}】制作商品")

        #调用父类方法 1
        #super(School, self).__init__()
        #super(School, self).make_cake()

        #调用父类的方法2 这种方法更简单一些
        super().__init__()
        super().make_cake()

print("--------- 第一次继承 ----------")
school = School()
school.make_cake()

class Test():
    def __init__(self):
        print("test init ")
    def make_cake(self):
        print("测试super")

# 在创建一个Prentice类继承自School
class Prentice(School,Test):
    def __init__(self):
        self.kongfu = ['秘制汤圆']

    def make_cake(self):
        print(f"学徒使用{self.kongfu}制作汤圆")

    # 调用父类的方法
    def make_school_cake(self):
        # 调用父类方法1
        # 这种方式代码冗余，如果类名发生变化，代码需要频繁修改
        #Master.__init__(self)
        #Master.make_cake(self)
        #School.__init__(self)
        #School.make_cake(self)

        # 调用父类方法2
        # super(当前类名，self).03 函数（）
        #super(Prentice, self).__init__()
        #super(Prentice, self).make_cake()

        # 调用父类方法3 super().03 函数()
        # 如果是多继承的情况，super默认是第一个父类
        super().__init__()
        super().make_cake()

print("--------- 第二次继承 ----------")
prentice = Prentice()
prentice.make_cake()
prentice.make_school_cake()






